package com.sanyou.service;

import com.sanyou.pojo.IndustryData;
import com.sanyou.pojo.vo.*;
import com.sanyou.utils.PagedResult;

import java.util.Date;
import java.util.List;

/**
 * User: asus
 * Date: 2021/6/14
 * Time: 15:02
 * Version:V1.0
 */
public interface IndustryDataService {

    /**
     * 获取饼图数据
     * @param industryDataVo
     * @return
     */
    List<IndustryDataVo> getPieChart(IndustryDataVo industryDataVo);

    /**
     * 获取柱状图数据
     * @param industryDataVo
     * @return
     */
    List<IndustryDataVo> getBarChart(IndustryDataVo industryDataVo);

    /**
     * 获取折线图数据
     * @param industryDataVo
     * @return
     */
    List<IndustryDataVo> getLineChart(IndustryDataVo industryDataVo);

    /**
     * 分页获取数据
     * @param industryDataVo
     * @param page
     * @param pageSize
     * @return
     */
    PagedResult query(IndustryDataVo industryDataVo,Integer page, Integer pageSize);

    /**
     * 获取周期折线图数据
     * @param industryDataVo
     * @return
     */
    List<IndustryDataVo> getCycleLineChart(IndustryDataVo industryDataVo);

    /**
     * 获取正太折线图数据
     * @param industryDataVo
     * @return
     */
    List<IndustryDataVo> getNormalLineChart(IndustryDataVo industryDataVo);

    /**
     * 获取正太柱状图数据
     * @param industryDataVo
     * @return
     */
    List<IndustryDataVo> getNormalBarChart(IndustryDataVo industryDataVo);

    /**
     * 分页获取数据
     * @param industryDataVo
     * @param page
     * @return
     */
    IndustryDataVo queryData(IndustryDataVo industryDataVo, Integer page);

    /**
     * 删除检测数据
     * @param industryDataVo
     */
    void deleteData(IndustryDataVo industryDataVo);

    /**
     * 下载数据
     * @param industryDataVo
     * @return
     */
    List<IndustryData> queryDownloadData(IndustryDataVo industryDataVo);

    /**
     * 获取正太折线图数据
     * @param industryDataVo
     * @return
     */
    List<IndustryDataVo> getNormalLineChart2(IndustryDataVo industryDataVo);

    EchartsVo getAllLBarChart(String userId);

    DynamicChartVo getHealthCount(String equipNo,
                                  Double healthLimit, Double subHealthLimit, String startTime, String endTime);

    PagedResult getLifeCycleData(String subFactoryNo, Date startDate, Date endDate,int page,int pageSize );

    /**
     * 客户界面获取机组拨片速度
     */
    List getStrippingSpeedForClient(String userId);

    /**
     * 客户页面动态检测
     */
    DynamicDetectVo getDynamicDetectPlate(String userId, Double needRepairThreshold, Integer page, Integer size);

    /**
     * 管理员页面阴极铜产量
     */
    List getCopperProduction(String userId);

    /**
     * 管理员页面阴极铜表面缺陷数据
     */
    List getCopperDefect(String userId);

    /**
     * 管理员界面获取机组拨片速度
     */
    List getStrippingSpeedForAdmin(String userId);

    Integer getFailNumber(Date startTime,Date endTime,String equipNo);

    /**
     * 获取时间在startTime~endTime之间的所有无法识别编码(编码全0)的动态检测记录
     * @param startTime
     * @param endTime
     * @param equipNo
     * @return
     */
    List<IndustryData> getIndustryDataListWithoutProductNo(Date startTime,Date endTime,String equipNo);

    /**
     * 分页获取时间在startTime~endTime之间的所有无法识别编码(编码全0)的动态检测记录
     * @param startTime
     * @param endTime
     * @param equipNo
     * @param page
     * @param pageSize
     * @return
     */
    PagedResult getIndustryDataListWithoutProductNo(Date startTime,Date endTime,String equipNo, Integer page, Integer pageSize);

    /**
     * 根据记录时间和设备更新记录的阴极板编号
     * @param dataTime
     * @param equipNo
     * @param newProductNo
     */
    void updateProductNo(Date dataTime, String equipNo, String newProductNo) throws Exception;

    /**
     * 根据条件获取阴极板的动态检测记录
     * @param productCode 阴极板编码(精准查询),为null时不做条件
     * @param equipNo 设备编号(精准查询),为null时不做条件
     * @param startTime 开始时间,为null时不做条件
     * @param endTime 结束时间,为null时不做条件
     * @return
     */
    List<IndustryData>  listIndustryData(String productCode,String equipNo,Date startTime,Date endTime);

    /**
     * 根据阴极板编码获取阴对应的动态检测记录
     * @param productCode 阴极板编码(精准查询),为null时返回空记录
     * @return
     */
    List<IndustryData>  listIndustryData(String productCode);
}
